#coding=utf-8

from collections import deque

class bstatus:
    '''bhistory中的單筆記錄'''
    def __init__(self, treeID = None, listID = None, editor = None):
        self.treeID = treeID #treeView指向的id
        self.listID = listID #listView指向的id
        self.editor = editor #editor載入的id

class bhistory:
    '''LoMain中的瀏覽歷程'''
    def __init__(self):
        self.nextList = [] #bstatus的list
        self.backList = deque([], maxlen = 100) #backList的[-1]就是當前的值

    def record(self, bstat):
        '''記錄瀏覽資料'''
        #如果新資料相同於當前資料，什麼都不做
        if bstat.editor == self.current().editor or bstat.editor == None:
            return
        else:
            #否則把next列表的內容刪光，然後append入
            self.nextList = []
            self.backList.append(bstat)

    def current(self):
        '''回傳當前瀏覽資料'''
        try:
            return self.backList[-1]
        except IndexError:
            return bstatus()

    def before(self):
        '''前滾一步瀏覽資料，同時回傳
        如果len(backList) == 0，無資料可讀，回傳指向首頁'''
        if len(self.backList) >= 2:
            self.nextList.append(self.backList.pop())
            return self.current()
        elif len(self.backList) == 1:
            return self.current()
        else:
            return bstatus(1,1,1)

    def next(self):
        '''後滾一步瀏覽資料，同時回傳
        如果len(nextList) >= 1，不後滾直接回傳'''
        if len(self.nextList) >= 1:
            self.backList.append(self.nextList.pop())
        return self.current()
